home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
magazyn_amiga
/
2
/
ami044a_kurs_c.list
< prev
next >
Wrap
Text File
|
1997-09-14
|
3KB
|
237 lines
/* Listing 10 */
#include <intuition/intuition.h>
#include <proto/diskfont.h>
#include <proto/exec.h>
#include <proto/graphics.h>
#include <proto/intuition.h>
#include <string.h>
#define W(r) ((r).MaxX - (r).MinX)
#define H(r) ((r).MaxY - (r).MinY)
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct Library *DiskfontBase;
void border(struct RastPort *rp, struct Rectangle *r);
struct TagItem mytags[]={{TA_DeviceDPI, 5<<16 | 4}, TAG_DONE};
struct TTextAttr tta={0, 0, FS_NORMAL | FSF_TAGGED, FPF_DISKFONT, mytags};
int main(int argc, char *argv[])
{
check_os(OS_20);
if (argc!=2)
return 10; /* Brak argumentu */
IntuitionBase=(struct IntuitionBase*)OpenLibrary("intuition.library", 37);
GfxBase=(struct GfxBase*)OpenLibrary("graphics.library", 37);
if (DiskfontBase=OpenLibrary("diskfont.library", 36))
{
struct Window *window;
if (window=OpenWindowTags(0, WA_Flags, WFLG_DRAGBAR | WFLG_CLOSEGADGET | WFLG_DEPTHGADGET | WFLG_ACTIVATE | WFLG_RMBTRAP, WA_IDCMP, IDCMP_CLOSEWINDOW, WA_Title, "Test czcionek czyli fontów.", TAG_END))
{
struct TextFont *tf;
struct TextExtent te;
struct Rectangle miejsce;
long len, error=FALSE;
miejsce.MinX=window->BorderLeft;
miejsce.MinY=window->BorderTop;
miejsce.MaxX=window->Width-window->BorderRight;
miejsce.MaxY=window->Height-window->BorderBottom;
tta.tta_Name=argv[1];
for (tta.tta_YSize=H(miejsce)/2; tta.tta_YSize>=4 && W(miejsce)>2 && H(miejsce)>=2+tta.tta_YSize && !error; tta.tta_YSize>>=1)
{
do
{
if (tf=OpenDiskFont((struct TextAttr*)&tta))
{
SetFont(window->RPort, tf); /* Podîâczenie czcionki do RP */
SetSoftStyle(window->RPort, tta.tta_Style, AskSoftStyle(window->RPort));
if (len=TextFit(window->RPort, argv[1], strlen(argv[1]), &te, NULL, 1, W(miejsce)-2, H(miejsce)-2))
{
Move(window->RPort, miejsce.MinX-te.te_Extent.MinX+1, miejsce.MinY-te.te_Extent.MinY+1);
miejsce.MinX+=2+W(te.te_Extent);
if (W(miejsce)>=2) /* rysujemy tylko gdy jest miejsce */
{
te.te_Extent.MinX--;
te.te_Extent.MinY--;
te.te_Extent.MaxX++;
te.te_Extent.MaxY++;
SetAPen(window->RPort, 3);
border(window->RPort, &te.te_Extent);
SetAPen(window->RPort, 1);
Text(window->RPort, argv[1], len);
tta.tta_Style++; /* Nastëpny styl */
tta.tta_Style &= FSF_ITALIC | FSF_BOLD | FSF_UNDERLINED | FSF_TAGGED;
}
}
CloseFont(tf);
}
else
error=TRUE;
} while (len && !error && W(miejsce)>0);
miejsce.MinY+=tta.tta_YSize+2;
miejsce.MinX=window->BorderLeft;
}
if (!error)
WaitPort(window->UserPort); /* Czekamy na klikniëcie na gadûet zamykania */
CloseWindow(window);
}
CloseLibrary(DiskfontBase);
}
CloseLibrary((struct Library*)GfxBase);
CloseLibrary((struct Library*)IntuitionBase);
return 0;
}
void border(struct RastPort *rp, struct Rectangle *r)
{
#define X rp->cp_x
#define Y rp->cp_y
Move(rp, X+r->MinX, Y+r->MinY);
Draw(rp, X-r->MinX+r->MaxX, Y);
Draw(rp, X, Y-r->MinY+r->MaxY);
Draw(rp, X+r->MinX-r->MaxX, Y);
Draw(rp, X, Y+r->MinY-r->MaxY);
Move(rp, X-r->MinX, Y-r->MinY);
#undef X
#undef Y
}